package com.itheima.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.dao.CheckgroupDao;
import com.itheima.entity.PageResult;
import com.itheima.pojo.CheckGroup;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author: bowen
 * @Date: 2019/6/24 15:52
 * @Description:检查组的服务类
 */

@Service(interfaceClass = CheckgroupService.class)
@Transactional
public class CheckgroupServiceImpl implements CheckgroupService {

    @Autowired
    CheckgroupDao checkgroupDao;
    
    /**
     *  @描述：新增检查组
     */
    @Override
    public void add(CheckGroup checkGroup, Integer[] checkitemids) {
    // 添加检查组的基本信息（检查组这个表完成）
        checkgroupDao.add(checkGroup);
        // 新增的检查组id
        Integer id = checkGroup.getId();
        // 建立检查组和检查项的关联关系（检查组和检查项的中间表完成）
        setRelationsBetweencheckGroupIdAndcheckitemids(id,checkitemids);
        
    }
    /**
     *  @描述：分页查询
     */
    @Override
    public PageResult findPage(Integer currentPage, Integer pageSize, String queryString) {
        PageHelper.startPage(currentPage, pageSize);
        Page<CheckGroup> checkGroups=checkgroupDao.findPage(queryString);
        return new PageResult(checkGroups.getTotal(), checkGroups.getResult());
    }

    
    /**
     *  @描述：根据id查询检查组基本信息
     */
    @Override
    public CheckGroup findCheckgroupById(Integer id) {
        return checkgroupDao.findCheckgroupById(id);
    }

    @Override
    public Integer[] findCheckItemIdsByCheckGroupId(Integer id) {
        return checkgroupDao.findCheckItemIdsByCheckGroupId(id);
    }

    @Override
    public void edit(CheckGroup checkGroup, Integer[] checkitemIds) {
    //    更新基本信息
        checkgroupDao.update(checkGroup);
    //    更新勾选信息
    //    1.删除原有的勾选信息
        checkgroupDao.deletecheckitemIdsByCheckGroupId(checkGroup.getId());
    //    2.新增新的勾选信息
        setRelationsBetweencheckGroupIdAndcheckitemids(checkGroup.getId(),checkitemIds);
    }

    /**
     *  @描述：查询所有的检查组
     */
    @Override
    public List<CheckGroup> findAll() {

        return checkgroupDao.findAll();
    }

    /**
     *  @描述：建立检查组和检查项之间的关联关系
     */
    private void setRelationsBetweencheckGroupIdAndcheckitemids(Integer id,Integer[] checkitemids){
        for (Integer checkitemid : checkitemids) {
            Map map = new HashMap();
            map.put("checkgroupId",id);
            map.put("checkitemId",checkitemid);
            checkgroupDao.setRelationsBetweencheckGroupIdAndcheckitemids(map);
        }
    }
}
